package com.jade.bss.customer.menu;

import java.util.List;

import com.jade.bss.base.BssException;
import com.jade.framework.base.criterion.Criteria;
import com.jade.framework.base.util.PagingList;

/**
 * 菜单管理接口。
 */
public interface MenuManager
{
    /**
     * 添加菜单。
     *
     * @param menu 菜单信息
     */
    public void add(Menu menu)
            throws BssException;

    /**
     * 更新菜单。
     *
     * @param menu 菜单信息
     */
    public void update(Menu menu)
            throws BssException;

//    /**
//     * 更新菜单状态。
//     *
//     * @param status 菜单状态
//     * @param ids 菜单标识数组
//     */
//    public void updateStatus(int status, long... ids)
//            throws BssException;

    /**
     * 获取菜单信息。
     *
     * @param id:内容菜单id
     * @param children:是否需要获取该内容菜单下的所有子内容菜单
     * @return 内容信息。
     */
    public Menu get(long id, boolean children);

    /**
     * 删除菜单。
     *
     * @param ids 内容标识
     */
    public void remove(long... ids)
            throws BssException;

    /**
     * 获取某一个菜单下面的子菜单。
     *
     * @param parentId 父菜单id
     * @param recursion:是否需要递归查询出所有子菜单
     * @return 子菜单列表。
     */
    public List<Menu> listChildren(long parentId, boolean recursion);

    /**
     * 列出所有子菜单id。
     *
     * @param parentId 上级菜单标识。

     * @return 子菜单标识列表。
     */
    public List<Integer> listChildrenIds(long parentId, boolean recursion);

    /**
     * 查询菜单．
     *
     * @return 菜单列表。
     */
    public PagingList<Menu> query(Criteria criteria, boolean children);

}
